package com.learn.algorlthm;

/**
 * 左旋转字符串
 *
 * 题目描述
 * Input:
 *   S="abcXYZdef"
 *   K=3
 * Output:
 *   "XYZdefabc"
 */
public class Learn58_2 {

    /**
     * 解题思路：
     *
     * 先将 "abc" 和 "XYZdef" 分别翻转，得到 "cbafedZYX"，然后再把整个字符串翻转得到 "XYZdefabc"。
     */
    public static String leftRotateString(String str, int n) {
        if (n > str.length())
            return str;
        char[] chars = str.toCharArray();
        reverse(chars, 0, n -1);
        reverse(chars, n, str.length() -1);
        reverse(chars, 0, str.length() -1);
        return new String(chars);
    }


    private static void reverse(char[] chars, int i, int j) {
        while (i < j)
            swap(chars, i++, j--);
    }

    private static void swap(char[] chars, int i, int j) {
        char t = chars[i];
        chars[i] = chars[j];
        chars[j] = t;
    }

}
